package com.linwen.excise.base;

import java.awt.Font;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
 
public class jshiben extends JFrame implements DocumentListener,WindowListener{
    JTextArea jta;
    boolean flag;
    public jshiben() {
        jta = new JTextArea();//文本域
        jta.setText("床前明月光");//文本域的文字-->可以通过IO加载txt文档的文字
        jta.setFont(new Font("宋体",Font.BOLD, 20));//文本域的字体
        jta.setLineWrap(true);//设置自动换行
        jta.getDocument().addDocumentListener(this);//添加文档变化事件的响应.比如修改,删除等
        JScrollPane jsp = new JScrollPane(jta);//滚动面板(当文字太多时,显示滚动条)
        add(jsp);
         
        setTitle("主窗口");//标题
        setSize(300, 260);//大小
        setLocationRelativeTo(null);//居中
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//点击窗口的关闭按钮时,执行windowClosing的代码
        addWindowListener(this);
        setVisible(true);//窗口可见
    }
    public static void main(String[] args) {
        new jshiben();
    }
     
    //实现WindowListener接口,需要重写下面的6个方法, windowClosing专门处理关闭时的方法
    public void windowOpened(WindowEvent e) {
    }
    public void windowClosing(WindowEvent e) {
        if(flag){
            int n = JOptionPane.showConfirmDialog(null, "已经更改了内容,需要保存后再退出吗?", "提示",JOptionPane.YES_NO_OPTION);
            //n等于-1表示关闭了弹出的对话框等情况的默认值
            //n等于0(JOptionPane.YES_OPTION)表示选择了Yes
            //n等于1(JOptionPane.NO_OPTION)表示选择了No
            if(n==JOptionPane.YES_OPTION){
                //把文字保存到文件的代码省略...
                System.out.println("正在使用IO进行保存..ing");
                closeFrame();//关闭窗口并退出
            }else if(n==JOptionPane.NO_OPTION){
                System.out.println("放弃保存修改.马上退出");
                closeFrame();
            }
             
        }else{
            closeFrame();
        }
    }
    public void windowClosed(WindowEvent e) {
    }
    public void windowIconified(WindowEvent e) {       
    }
    public void windowDeiconified(WindowEvent e) {     
    }
    public void windowActivated(WindowEvent e) {       
    }
    public void windowDeactivated(WindowEvent e) {
    }
     
     
    //文档事件,有下面三个,如果触发其中一个,都可以认为修改了文档,所以需要在退出时进行提示,是否保存
    public void insertUpdate(DocumentEvent e) {//插入
        flag=true;
    }
    public void removeUpdate(DocumentEvent e) {//删除
        flag=true;
    }
    public void changedUpdate(DocumentEvent e) {//改变
        flag=true;
    }
     
    //关闭窗口的方法
    public void closeFrame(){
        this.setVisible(false);//窗口不可见
        this.dispose();//窗口销毁
        System.exit(0);//JVM虚拟机退出
    }
}